package com.ztgf.user.models.service;

import com.baomidou.mybatisplus.service.IService;
import com.ztgf.common.constant.Result;
import com.ztgf.shopping.models.dto.shop.ShopBlacklistDTO;
import com.ztgf.shopping.models.dto.shop.ShopInfoDTO;
import com.ztgf.user.models.bo.UserLoginBO;
import com.ztgf.user.models.bo.UserLoginSaveBO;
import com.ztgf.user.models.bo.UserLoginSubSaveBO;
import com.ztgf.user.models.bo.UserLoginUpdateBO;
import com.ztgf.user.models.dto.UserImDTO;
import com.ztgf.user.models.dto.UserInfoDTO;
import com.ztgf.user.models.dto.UserLoginDTO;
import com.ztgf.user.models.vo.UserLoginVO;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;

/**
 * 用户登录表服务
 *
 * @author zhanghualang
 * @Date 2020-05-28 17:42:53
 */
public interface IUserLoginService extends IService<UserLoginDTO> {

    boolean setUserBySessionId(UserInfoDTO userInfoDTO, String sessionId);//设置用户session

    UserInfoDTO getUserBySessionId(String sessionId);//根据session获取用户信息

    void resetSession(Long userId);

    UserInfoDTO add(UserLoginSaveBO saveBO); //注册

    UserLoginDTO getLogin(UserLoginBO userLoginBO); //验证账号

    boolean getSmsCaptcha(String mobile, String captcha, Integer type); //验证验证码

    Result updatePassword(UserLoginBO userLoginBO); //修改密码

    UserInfoDTO getLoginMobile(UserLoginDTO userLoginDTO); //免密登录

    UserLoginDTO getLoginByMobile(String mobile); //根据手机号获取登录DTO

    boolean updateByMobile(String mobile); //判断手机号是否重复

    boolean addSub(UserLoginSubSaveBO saveBO); //添加子账号

    ArrayList<UserLoginVO> queryPageListByShop(Long shopId, Integer type); //根据店铺ID，店铺类型。获取店铺主账号信息

    UserLoginDTO getLoginByEmail(String email); //根据Email获取登录DTO

    boolean updateByEmail(String email);//判断邮箱重复

    UserInfoDTO getUserInfo(UserLoginBO userLoginBO); //账号密码登录

    ShopInfoDTO getShopInfo(Long userId);//获取店铺信息

    ShopBlacklistDTO getByCompanyName(String name, Integer type); //获取注册黑名单

    Result updateQuit(String sessionId);//退出登录

    boolean getLoginByName(String name);

    boolean getLoginReturnByName(String name, Long userId);

    boolean updateEmail(UserLoginUpdateBO bo); //修改邮箱

    boolean updateMobile(UserLoginUpdateBO bo); //修改收钱

    boolean getEmailCaptcha(String email, String captcha); //邮箱验证

    void sendEmail(String email, Long id); //发送激活邮件

    boolean updateContactInfo(UserLoginUpdateBO bo);

    UserImDTO getImById(Long userId, Integer type);//获取im对象

    boolean getActiveByEmail(String email); //根据email获取邮箱激活状态

    boolean setVerifyWidth(String key, Integer xWidth);//redis 设置验证图片xwidth

    String getVerifyWidth(String key);//redis 获取验证图片xwidth

    void deleteVerifyWidth(String key);//清除缓存

    int lowerVerifyNum(UserLoginDTO userLoginDTO); //减少次数

    List<UserLoginDTO> queryLock(Long minNo, Integer pageNo); //分批次获取被锁账号

    Result saveRegistered(String loginVO);
}
